#include "./Level.h"
#include "../../Core/PvN.h"


namespace GameLogic {
namespace Level {

Level::Level( int width, int height, float tile_size ):
	tiles_( width, height, tile_size )
{}

Level::~Level() {}

// TODO: Przeniesc to z powrotem do definicji klasy
Tile* Level::getTile( int x, int y ) {
	return tiles_.get( x, y );
}

void Level::deployOnServer() {
	GameLogic::Simulation* sim = Core::PvN::getInstance().getSimulation();
	Core::PlayerArray &player_array = Core::PlayerArray::getInstance();

	// pobiera wolne miejsce w tabeli graczy:
	unsigned char pid = player_array.getUniquePlayerId();

	//tworzy id obiektu gracza:
	GameLogic::Objects::ObjectId oid = GameLogic::Objects::ObjectId( OT_PLAYER_NINJA, pid, 0 );

	// przygotowuje strukture opisujaca gracza:
	Core::Player* player_struct = new Core::Player();
	player_struct->id = pid;
	player_struct->uid = 0xAB;
	player_struct->team = TEAM_NINJAS;

	// wpisuje gracza do tabeli graczy:
	player_array.addPlayer( pid, player_struct );
	player_array.setLocalPlayerById( pid );

	//tworzy gracza na spawnpoincie:
	Data *data = new Data();
	data->time = sim->now();
	data->position = getSpawnPoint( TEAM_NINJAS );

	// tworzy obiekt:
	sim->updateObject( oid, data );

	// zapisuje w strukturze gracza wskazanie na kontrolowany przez niego obiekt:
	player_struct->controlled_object = getObject( oid );
}

} //namespace Level
} //namespace GameLogic
